#include "func.h"

FILE * fp;

FILE *file_open(const char *path, const char *mode) // 打开文件
{
    FILE *fp = fopen(path, mode);
    if (NULL == fp)
    {
        printf("文件创建失败\n");
        exit(-1); // 退出整个程序
    }
    return fp;
}

int file_close(FILE **fp) // 关闭文件
{
    fclose(*fp);
    *fp = NULL;
}

void init(Class *P) // 初始化
{
    if (P == NULL)
    {
        printf("表为NULL");
        return;
    }
    P->len = 0;
}

void stuadd(Class *P, student stu) // 添加学生
{
    if (P == NULL)
    {
        printf("表为NULL");
        return;
    }
    if (P->len >= MAX)
    {
        printf("人满了！");
        return;
    }

    P->data[P->len] = stu;
    strcpy(P->data[P->len].stu_pas, "123"); // 初始密码
    //打开文件
    fp = fopen("stu_data_file","a+");

    //添加信息
    fprintf(fp, "姓名:%s\t性别:%s\t密码:%s\t年龄:%d\t学号:%d\t成绩:%d\n",P->data[P->len].name, P->data[P->len].sex,
    P->data[P->len].stu_pas,P->data[P->len].age,P->data[P->len].id,P->data[P->len].grade);

    //关闭文件
    file_close(&fp);

    P->len++;
}

void traversal(Class *P) // 遍历
{
    if (P == NULL)
    {
        printf("表为NULL");
        return;
    }
    printf("____________________________________\n");
    printf("|名字    |性别  |年龄  |学号  |成绩|\n");
    printf("————————————————————————————————————\n");
    for (size_t i = 0; i < P->len; i++)
    {
        printf("|%-10s|%-6s |%-6d|%-6ld|%-4d|\n", P->data[i].name, P->data[i].sex, P->data[i].age, i + 1, P->data[i].grade);
        printf("————————————————————————————————————\n");
    }
}

void studel_last(Class *P) // 删除最后一个
{
    if (P == NULL)
    {
        printf("表为NULL");
        return;
    }
    if (P->len <= 0)
    {
        printf("没人了！");
        return;
    }
    P->len--;
    printf("%s被开除了!\n", P->data[P->len].name);
}

int stufind(Class *P, char *str) // 查名字P
{
    for (size_t i = 0; i < P->len; i++)
    {
        if (!strcmp(P->data[i].name, str))
        {
            return i; // 返回学号从1开始
        }
    }
    return EOF;
}

void findname_del(Class *P) // 通过名字删数据
{
    char str_1[20];
    int location; // 获取该名字位置
    printf("请输入你要开除的学生");
    scanf("%s", str_1);
    location = stufind(P, str_1);
    printf("%s被开除了!\n", P->data[location].name);
    strcpy(P->data[location].name, "0");
    strcpy(P->data[location].sex, "0");
    P->data[location].age = 0;
    P->data[location].id = 0;
    P->data[location].grade = 0;
}

void findname_changegrade(Class *P) // 通过名字改成绩
{
    char str_2[20];
    int ch_grade;
    int location; // 获取该名字位置
    printf("请输入你要查找的学生\n");
    scanf("%s", str_2);
    location = stufind(P, str_2);
    printf("请输入你要修改的成绩\n");
    scanf("%d", &ch_grade);
    P->data[location].grade = ch_grade;
    if (P->data[location].grade == ch_grade)
    {
        printf("修改成功!");
    }
    else
        printf("修改失败!");
}

void Check_score(Class *P) // 通过名字查成绩
{
    char str_2[20];
    int location; // 获取该名字位置
    printf("请输入你要查找的学生\n");
    scanf("%s", str_2);
    location = stufind(P, str_2);
    printf("%s的成绩是:%d\n", P->data[location].name, P->data[location].grade);
}

void Change_Pas(Class *P, int location) // 修改密码
{
    char change_pas[10];
    printf("请输入你要修改的密码:");
    scanf("%s", change_pas);
    strcpy(P->data[location].stu_pas, change_pas);
    if (!strcmp(P->data[location].stu_pas, change_pas))
    {
        // printf("%s",P->data[location].stu_pas);
        printf("修改成功!");
    }
    else
        printf("修改失败!");
}
